using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


using System.Data;
using System.Data.SqlClient;
using AdminCondominio.Dominio;
namespace AdminCondominio.Persistencia
{
    public class SeparacionAreaComunDAO
    {
        private SqlConnection _cn = null;

        public SeparacionAreaComunDAO(){
            _cn = new SqlConnection(@"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=sa;Password=");
     
           // _cn = new SqlConnection(@"Data Source=(local);Initial Catalog=BdCondominio;Integrated Security=True");
        }

        public int DeleteSeparacionAreaComun(int codigo)
        {
            SqlCommand _cmd = new SqlCommand();
            _cmd.CommandType = CommandType.Text;
            _cmd.Connection = _cn;
            _cmd.CommandText = @"DELETE [separacion_area_comun] WHERE [CoSeparacion]=" + codigo;
            _cmd.Connection.Open();
            int _NunRefAfct = _cmd.ExecuteNonQuery();
            _cmd.Connection.Close();
            _cmd.Dispose();
            return _NunRefAfct;
        }
        public SeparacionAreaComun InsertSeparacionAreaComun(Dominio.SeparacionAreaComun value)
        {

            SeparacionAreaComun separacionareacomunCreado = null;

            try
            {
                

                    SqlCommand _cmd = new SqlCommand();
                                    _cmd.CommandType = CommandType.Text;
                                    _cmd.Connection = _cn;
                                    _cmd.CommandText = @"INSERT INTO separacion_area_comun VALUES(@coareacomun,@coresidente,@feseparacion,@nupersonas,@noresponsable,@txcomentario,@estado)";
                                    _cmd.Parameters.Add("@coareacomun", SqlDbType.Int).Value = value.AreaComun.CoAreaComun;
                                    _cmd.Parameters.Add("@coresidente", SqlDbType.Int).Value = value.Residente.CoResidente;
                                    _cmd.Parameters.Add("@feseparacion", SqlDbType.DateTime).Value = value.FeSeparacion;
                                    _cmd.Parameters.Add("@nupersonas", SqlDbType.Int).Value = value.NuPersonas;
                                    _cmd.Parameters.Add("@noresponsable", SqlDbType.VarChar, 20).Value = value.NoResponsable;
                                    _cmd.Parameters.Add("@txcomentario", SqlDbType.VarChar, 200).Value = value.TxComentario;
                                    _cmd.Parameters.Add("@estado",SqlDbType.Char,1).Value= value.Estado;
                                    _cmd.Connection.Open();
                                   
                                   _cmd.ExecuteNonQuery();
                                   _cmd.Connection.Close();
                                    _cmd.Dispose();

                                    separacionareacomunCreado = this.ObtenerSeparacionAreaComun(value.CoSeparacion);
                      
               
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return separacionareacomunCreado;
            
        }

        public SeparacionAreaComun ObtenerSeparacionAreaComun(int codigo)
        {
            SeparacionAreaComun _SeparacionAreaComun = null;
            try{
            

            _cn.Open();
            String cad = "select * from separacion_area_comun where CoSeparacion="+codigo;

            SqlCommand _cmd = new SqlCommand(cad, _cn);
          
            SqlDataReader filtro = _cmd.ExecuteReader();
            if (filtro.HasRows)
            {
                _SeparacionAreaComun = new SeparacionAreaComun();
                filtro.Read();

                _SeparacionAreaComun.CoSeparacion = (Int32)filtro[0];
                _SeparacionAreaComun.AreaComun = new AreaComun();
                _SeparacionAreaComun.AreaComun.CoAreaComun = (int)filtro[1];
                _SeparacionAreaComun.Residente = new Residente();
                _SeparacionAreaComun.Residente.CoResidente = (int)filtro[2];
                _SeparacionAreaComun.FeSeparacion = (DateTime)filtro[3];
                _SeparacionAreaComun.NuPersonas = (int)filtro[4];
                _SeparacionAreaComun.NoResponsable = (String)filtro[5];
                _SeparacionAreaComun.TxComentario=(String)filtro[6];
                _SeparacionAreaComun.Estado=(String)filtro[7];
            }
            _cn.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return _SeparacionAreaComun;
        }
       
        public SeparacionAreaComun ModificarSeparacionAreaComun(SeparacionAreaComun data)
        {
            SeparacionAreaComun SeparacionAreaComunObtener = null;
          try{
            SqlCommand _cmd = new SqlCommand();
            _cmd.CommandType = CommandType.Text;
            _cmd.Connection = _cn;

            _cmd.CommandText = "update separacion_area_comun set feseparacion=@feseparacion,nupersonas=@nupersonas,noresponsable=@noresponsable,txcomentario=@txcomentario,estado=@estado where CoSeparacion="+data.CoSeparacion;
            _cmd.Parameters.Add("@feseparacion", SqlDbType.DateTime).Value = data.FeSeparacion;
            _cmd.Parameters.Add("@nupersonas", SqlDbType.Int).Value = data.NuPersonas;
            _cmd.Parameters.Add("@noresponsable", SqlDbType.VarChar).Value = data.NoResponsable;
            _cmd.Parameters.Add("@txcomentario", SqlDbType.VarChar).Value = data.TxComentario;
            _cmd.Parameters.Add("@estado", SqlDbType.Char).Value = data.Estado;

            _cmd.Connection.Open();
            _cmd.ExecuteNonQuery();

            _cmd.Connection.Close();
 
            SeparacionAreaComunObtener = ObtenerSeparacionAreaComun(data.CoSeparacion);
            
          }
          catch (Exception e)
          {
              throw new Exception(e.Message);
          }
            return SeparacionAreaComunObtener;

        }

        public List<SeparacionAreaComun> ListarSeparacionAreaComun(String feseparacion)
        {
            List<SeparacionAreaComun> _LisSeparacionAreaComun = null;
            try{
            _cn.Open();
            String _Sentencia = @"select sa.FeSeparacion,sa.NuPersonas,sa.NoResponsable,sa.TxComentario,sa.Estado,ac.CoAreaComun, ac.TxUbicacion,re.NoResidente, sa.CoSeparacion"
+ " from dbo.separacion_area_comun sa "
+ " inner join area_comun ac on (ac.CoAreaComun=sa.CoAreaComun)"
+ " inner join residente re on (re.CoResidente=sa.CoResidente)";
//+" where sa.FeSeparacion ='" + feseparacion + "'";
            
            SqlCommand _cmd = new SqlCommand(_Sentencia, _cn);
            _cmd.CommandType = CommandType.Text;

            SqlDataReader resultado = _cmd.ExecuteReader();
            _LisSeparacionAreaComun = new List<SeparacionAreaComun>();

            while (resultado.Read())
            {
                SeparacionAreaComun _Item = new SeparacionAreaComun();
                _Item.CoSeparacion = (int)resultado["CoSeparacion"];
                _Item.Residente = new Residente();
                _Item.Residente.NoResidente = (string)resultado["NoResidente"];
                _Item.AreaComun = new AreaComun();
                _Item.AreaComun.CoAreaComun = (int)resultado["CoAreaComun"];
                _Item.AreaComun.Ubicacion = (String)resultado["TxUbicacion"];
                _Item.FeSeparacion = resultado.IsDBNull(0) ? DateTime.MinValue :  (DateTime)resultado["FeSeparacion"] ;
                _Item.NuPersonas = resultado.IsDBNull(1) ? 0 : (int)resultado["NuPersonas"];
                _Item.NoResponsable = resultado.IsDBNull(2) ? string.Empty : (string)resultado["NoResponsable"];
                _Item.TxComentario = resultado.IsDBNull(3) ? string.Empty : (String)resultado["TxComentario"];
                _Item.Estado = resultado.IsDBNull(4) ? string.Empty : (string)resultado["Estado"];
                _LisSeparacionAreaComun.Add(_Item);
            }

            _cn.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return _LisSeparacionAreaComun;


        }

       

      
        public SeparacionAreaComun ObtenerSeparacionAreaComunConAreaComunYFecha(int CoAreaComun,DateTime FeSeparacion)
        {

            SeparacionAreaComun _SeparacionAreaComun = null;

            try{
            _cn.Open();
            String cad = "select * from separacion_area_comun where CoAreaComun=@coareacomun and FeSeparacion=@feseparacion";

            SqlCommand _cmd = new SqlCommand(cad, _cn);

            _cmd.CommandType = CommandType.Text;
            _cmd.Parameters.Add("@coareacomun", SqlDbType.Int).Value = CoAreaComun;
            _cmd.Parameters.Add("@feseparacion", SqlDbType.DateTime).Value = FeSeparacion;

            SqlDataReader filtro = _cmd.ExecuteReader();
            if (filtro.HasRows)
            {
                _SeparacionAreaComun = new SeparacionAreaComun();
                filtro.Read();

                _SeparacionAreaComun.CoSeparacion = (Int32)filtro[0];
                _SeparacionAreaComun.AreaComun = new AreaComun();
                _SeparacionAreaComun.AreaComun.CoAreaComun = (int)filtro[1];
                _SeparacionAreaComun.Residente = new Residente(); 
                _SeparacionAreaComun.Residente.CoResidente = (int)filtro[2];
                _SeparacionAreaComun.FeSeparacion = (DateTime)filtro[3];
                _SeparacionAreaComun.NuPersonas = (int)filtro[4];
                _SeparacionAreaComun.NoResponsable = (String)filtro[5];
                _SeparacionAreaComun.TxComentario = (String)filtro[6];
                _SeparacionAreaComun.Estado = (String)filtro[7];
            }
            _cn.Close();

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return _SeparacionAreaComun;
        }
        public SeparacionAreaComun ObtenerSeparacionAreaComunConResidenteYFecha(int CoResidente, DateTime FeSeparacion)
        {

            SeparacionAreaComun _SeparacionAreaComun = null;

            try{
            _cn.Open();
            String cad = "select * from separacion_area_comun where CoResidente=@coresidente and FeSeparacion=@feseparacion";

            SqlCommand _cmd = new SqlCommand(cad, _cn);

            _cmd.CommandType = CommandType.Text;
            _cmd.Parameters.Add("@coresidente", SqlDbType.Int).Value = CoResidente;
            _cmd.Parameters.Add("@feseparacion", SqlDbType.DateTime).Value = FeSeparacion;

            SqlDataReader filtro = _cmd.ExecuteReader();
            if (filtro.HasRows)
            {
                _SeparacionAreaComun = new SeparacionAreaComun();
                filtro.Read();

                _SeparacionAreaComun.CoSeparacion = (Int32)filtro[0];
                _SeparacionAreaComun.AreaComun = new AreaComun();
                _SeparacionAreaComun.AreaComun.CoAreaComun = (int)filtro[1];
                _SeparacionAreaComun.Residente = new Residente();
                _SeparacionAreaComun.Residente.CoResidente = (int)filtro[2];
                _SeparacionAreaComun.FeSeparacion = (DateTime)filtro[3];
                _SeparacionAreaComun.NuPersonas = (int)filtro[4];
                _SeparacionAreaComun.NoResponsable = (String)filtro[5];
                _SeparacionAreaComun.TxComentario = (String)filtro[6];
                _SeparacionAreaComun.Estado = (String)filtro[7];
            }
            _cn.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return _SeparacionAreaComun;
        }


    }
}